package com.keli.common;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateFormatter {
	// 时间格式：2014/09/10 10:41:03
	public static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss";
	public static String currentId = null;

	/**
	 * 将String格式的时间转换成java.util.Date格式
	 * @param time String格式的时间
	 * @return 出现异常返回系统当前时间
	 */
	public static Date toDate(String time) {
		SimpleDateFormat formatter = new SimpleDateFormat(TIME_FORMAT);
		try {
			return formatter.parse(time);
		} catch (ParseException e) {
			return new Date();
		}
	}

	/**
	 * 获取下一分钟的String格式的时间
	 * @param time String格式的时间
	 * @return
	 */
	public static String nextMinute(String time) {
		Calendar cal = new GregorianCalendar();
		cal.setTime(toDate(time));
		cal.add(Calendar.MINUTE, +1); // 下一分钟
		SimpleDateFormat formatter = new SimpleDateFormat(TIME_FORMAT);
		return formatter.format(cal.getTime());
	}

	/**
	 * 将java.util.Date格式的时间转换成String格式
	 * 
	 * @param date
	 *            java.util.Date格式的时间
	 * @return
	 */
	public static String toString(Date date) {
		SimpleDateFormat formatter = new SimpleDateFormat(TIME_FORMAT);
		return formatter.format(date);
	}

	/**
	 * 使用15位时间作为基本表主键，精确到毫秒
	 * 
	 * @return
	 */
	public static String time15Id() {
		// 用hh表示用12小时制，HH表示用24小时制
		SimpleDateFormat format = new SimpleDateFormat("yyMMddHHmmssSSS");

		if (currentId == null) {
			currentId = format.format(new Date());
		} else {
			Calendar cal = new GregorianCalendar();
			try {
				cal.setTime(format.parse(currentId));
			} catch (ParseException e) {
				//e.printStackTrace();
				System.out.println(e.getMessage());
			}
			cal.add(Calendar.MILLISECOND, +1);
			currentId = format.format(cal.getTime());
		}

		System.out.println("currentId: " + currentId);

		return currentId;
	}

	/**
	 * 判断时间d1是否大于d2，即d2是否早于d1
	 * @param d1 时间1
	 * @param d2 时间2
	 * @return
	 */
	public static boolean max(Date d1, Date d2) {
		return d1.after(d2);
	}

	/**
	 * 判断时间d1是否大于d2，即d2是否早于d1
	 * @param d1 时间1
	 * @param d2 时间2
	 * @return
	 */
	public static boolean max(String d1, String d2) {
		return d1.compareTo(d2) > 0;
	}

	public static void main(String[] args) {
		String t1 = "2014-09-18 11:11:49";
		String t2 = "2014-09-18 11:16:23";
		System.out.println(max(t1, t2));
		System.out.println(max(t2, t1));
	}
}
